﻿using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace 检测瞬间输入02
{
    public partial class MainWindow : Window
    {
        private DispatcherTimer inputTimer;
        private DateTime inputStartTime;
        private int initialLength = 0;
        private bool isFirstChange = true;
        private const int RequiredChars = 12;  // 需要输入的最少字符数
        private const int TimeLimitMs = 1000;  // 时间限制（毫秒）

        public MainWindow()
        {
            InitializeComponent();

            // 初始化计时器
            inputTimer = new DispatcherTimer
            {
                Interval = TimeSpan.FromMilliseconds(50)  // 检查间隔
            };
            inputTimer.Tick += InputTimer_Tick;
        }

        private void InputTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            // 首次输入时记录初始状态
            if (isFirstChange)
            {
                initialLength = InputTextBox.Text.Length;
                inputStartTime = DateTime.Now;
                inputTimer.Start();
                StatusTextBlock.Text = "正在输入...";
                isFirstChange = false;
            }

            // 计算当前输入的字符数
            int currentChars = InputTextBox.Text.Length - initialLength;

            // 如果达到或超过要求的字符数，检查时间
            if (currentChars >= RequiredChars)
            {
                TimeSpan elapsed = DateTime.Now - inputStartTime;
                if (elapsed.TotalMilliseconds <= TimeLimitMs)
                {
                    // 满足快速输入条件，处理结果
                    HandleFastInput(InputTextBox.Text);
                }
                else
                {
                    // 时间超过限制，重置
                    ResetInputDetection();
                    StatusTextBlock.Text = "输入超时，请重新输入";
                }
            }
        }

        private void InputTimer_Tick(object sender, EventArgs e)
        {
            // 计算已经过去的时间
            TimeSpan elapsed = DateTime.Now - inputStartTime;

            // 如果超过时间限制，重置
            if (elapsed.TotalMilliseconds > TimeLimitMs)
            {
                ResetInputDetection();
                StatusTextBlock.Text = "输入超时，请重新输入";
            }
            else
            {
                // 更新状态显示剩余时间
                int remainingMs = TimeLimitMs - (int)elapsed.TotalMilliseconds;
                StatusTextBlock.Text = $"快速输入中...剩余时间: {remainingMs}ms";
            }
        }

        private void HandleFastInput(string text)
        {
            // 停止计时器
            inputTimer.Stop();

            // 获取快速输入的部分（从第一个字符开始）
            string fastInputText = text.Substring(initialLength);

            // 更新状态
            StatusTextBlock.Text = $"快速输入成功！输入内容: {fastInputText}";

            // 添加到结果列表
            ResultListBox.Items.Add($"[{DateTime.Now:HH:mm:ss.fff}] {fastInputText}");

            // 在这里可以执行你需要的后续操作
            Perform后续操作(fastInputText);

            // 重置检测
            ResetInputDetection();
        }

        private void Perform后续操作(string input)
        {
            // 这里是你需要执行的后续操作
            // 例如：提交表单、查询数据等
            // ...
        }

        private void ResetInputDetection()
        {
            inputTimer.Stop();
            isFirstChange = true;

            // 如果文本框内容没有变化，保持初始长度
            if (InputTextBox.Text.Length == 0)
            {
                initialLength = 0;
            }
        }

        private void ClearButton_Click(object sender, RoutedEventArgs e)
        {
            ResultListBox.Items.Clear();
            InputTextBox.Text = string.Empty;
            StatusTextBlock.Text = "等待输入...";
            ResetInputDetection();
        }
    }
}